package dao

import (
	"time"
)

// 这是 Coupon 的全局公开dao对象，被service层调用!
var CouponDao = couponDao{}

// 优惠券信息及规则表
// 这是 coupon表 的实体类,这个实体类中的字段可以减少，但是不能在其基础上增加!
type Coupon struct {
	Id         int32     `json:"id" form:"id" v:"id" db:"id"`
	Name       string    `json:"name" form:"name" v:"name" db:"name"`                             // 优惠券名称
	Desc       string    `json:"desc" form:"desc" v:"desc" db:"desc"`                             // 优惠券介绍，通常是显示优惠券使用限制文字
	Tag        string    `json:"tag" form:"tag" v:"tag" db:"tag"`                                 // 优惠券标签，例如新人专用
	Total      int32     `json:"total" form:"total" v:"total" db:"total"`                         // 优惠券数量，如果是0，则是无限量
	Discount   float64   `json:"discount" form:"discount" v:"discount" db:"discount"`             // 优惠金额，
	Min        float64   `json:"min" form:"min" v:"min" db:"min"`                                 // 最少消费金额才能使用优惠券。
	Limit      int16     `json:"limit" form:"limit" v:"limit" db:"limit"`                         // 用户领券限制数量，如果是0，则是不限制；默认是1，限领一张.
	Type       int16     `json:"type" form:"type" v:"type" db:"type"`                             // 优惠券赠送类型，如果是0则通用券，用户领取；如果是1，则是注册赠券；如果是2，则是优惠券码兑换；
	Status     int16     `json:"status" form:"status" v:"status" db:"status"`                     // 优惠券状态，如果是0则是正常可用；如果是1则是过期; 如果是2则是下架。
	GoodsType  int16     `json:"goods_type" form:"goods_type" v:"goods_type" db:"goods_type"`     // 商品限制类型，如果0则全商品，如果是1则是类目限制，如果是2则是商品限制。
	GoodsValue string    `json:"goods_value" form:"goods_value" v:"goods_value" db:"goods_value"` // 商品限制值，goods_type如果是0则空集合，如果是1则是类目集合，如果是2则是商品集合。
	Code       string    `json:"code" form:"code" v:"code" db:"code"`                             // 优惠券兑换码
	TimeType   int16     `json:"time_type" form:"time_type" v:"time_type" db:"time_type"`         // 有效时间限制，如果是0，则基于领取时间的有效天数days；如果是1，则start_time和end_time是优惠券有效期；
	Days       int16     `json:"days" form:"days" v:"days" db:"days"`                             // 基于领取时间的有效天数days。
	StartTime  time.Time `json:"start_time" form:"start_time" v:"start_time" db:"start_time"`     // 使用券开始时间
	EndTime    time.Time `json:"end_time" form:"end_time" v:"end_time" db:"end_time"`             // 使用券截至时间
	AddTime    time.Time `json:"add_time" form:"add_time" v:"add_time" db:"add_time"`             // 创建时间
	UpdateTime time.Time `json:"update_time" form:"update_time" v:"update_time" db:"update_time"` // 更新时间
	Deleted    int8      `json:"deleted" form:"deleted" v:"deleted" db:"deleted" gm:"deleted"`    // 逻辑删除

}

// 注意:这是 Coupon 的私有dao对象，只能在dao层内使用!
type couponDao struct {
	InsertTemplate func(arg Coupon) (int64, error)        //插入一条记录
	UpdateTemplate func(arg Coupon) (int64, error)        //更新一条记录
	DeleteTemplate func(id int64) (int64, error)          `args:"id"` //根据传入的主键删除一条记录
	SelectTemplate func(id int64) (Coupon, error)         `args:"id"` //根据传入的主键获取一条记录
	List           func(arg CouponList) ([]Coupon, error) //模糊分页查询
}

/*
// 这是 coupon 表的Postman测试参数
// 该结构体中的字段就是: 前后端交互的json字段!
type CouponPostman struct {
id
name
desc
tag
total
discount
min
limit
type
status
goods_type
goods_value
code
time_type
days
start_time
end_time
add_time
update_time
deleted

}*/

// 这是 coupon 表的批量请求参数
type CouponReq struct {
	List []Coupon `json:"list" form:"list"`
}

// 这是 couponDao.List()方法的请求参数
type CouponList struct {
	Page
}
